package pio.action.administrador.paradas;

import DBMS.DataBaseManager;
import DBMS.TableReader;
import clases.Aspirante;
import clases.Parada;
import clases.Institucion;
import clases.ArchivoExcelAulPar;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author charles
 */
public class AgregarExcel extends DispatchAction {

    /* forward name="success" path="" */
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";

    public ActionForward cargar(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        ArchivoExcelAulPar uploadForm = (ArchivoExcelAulPar) form;
        String sede= uploadForm.getSede();
        System.out.println(sede);
        String mensaje = "";
        ArrayList errores = new ArrayList();
        boolean cargaExitosa = true;
        try {
            String path = getPath(uploadForm);
            TableReader table = new TableReader(new File(path));
            Parada[] tmp = new Parada[table.getMaxRows()];
            Institucion[] tmpInst= new Institucion[table.getMaxRows()];

            if (table.getMaxRows() > 1) {
                table.setRow(1); //table.read();// LEE ENCABEZADO
            } else {
                uploadForm.setMensaje("Archivo Vacio");
                return mapping.findForward(FAILURE);
            }
            int fila = 0;
            while (table.hasNext()) {
                String[] h = table.read();
                Parada parada = new Parada();
                Institucion institucion= new Institucion();
                if (h[0].isEmpty() || h[1].isEmpty() || h[2].isEmpty()
                        || h[3].isEmpty()) {
                    break;
                }
                institucion.setId(Integer.parseInt(h[1]));
                parada.setNombre(h[2]);
                parada.setDescripcion(h[3]);
                tmp[fila] = parada;
                tmpInst[fila] = institucion;
                fila++;
            }
            tmp[fila] = null;
            tmpInst[fila]=null;
            table.finish();
            DataBaseManager dbms = DataBaseManager.getInstance();
            ArrayList<Parada> paradas;
            fila = 0;
            while (fila < tmp.length && tmp[fila] != null && tmpInst[fila]!= null) {
                Parada auxParada =tmp[fila];
//                auxParada.setDescripcion(null);
                dbms.agregarParada(tmp[fila]);
                if (dbms.consultarParada(auxParada)==null) {
                    if (mensaje.isEmpty()) {
                        mensaje += "Error en el archivo en las lineas: ";
                    }
                    cargaExitosa = false;
                    mensaje += (fila + 2) + "\n";
                    errores.add(fila);
                }else if(dbms.consultarParada(auxParada)!=null){
                    paradas= dbms.consultarParada(auxParada);
                    int idParada = paradas.get(0).getId();
                    tmpInst[fila].setIdParada(idParada);
                    dbms.modificarInstitucion(tmpInst[fila]);
                    dbms.actualizarSede(tmpInst[fila], sede);
                }
                
                fila++;
            }
            if (cargaExitosa) {
                mensaje = "Carga finalizada con exito.";
            }
            uploadForm.setMensaje(mensaje);
            return mapping.findForward(SUCCESS);
        } catch (Exception e) {
            mensaje = "Error: Archivo no soportado o Formato de Excel invalido";
            uploadForm.setMensaje(mensaje);
            return mapping.findForward(FAILURE);
        }
    }

    private String getPath(ArchivoExcelAulPar uploadForm) throws IOException {
        String path = "";
        FileOutputStream outputStream = null;
        FormFile formFile = null;
        try {
            formFile = uploadForm.getPath();
            path = getServlet().getServletContext().getRealPath("") + "/"
                    + formFile.getFileName();
            outputStream = new FileOutputStream(new File(path));
            outputStream.write(formFile.getFileData());
        } catch (Exception e) {
            // Do Nothing
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
        return path;
    }

    public ActionForward page(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return mapping.findForward("page");
    }
}